package com.ehsy.statement;

import com.dtflys.forest.exceptions.ForestRetryException;
import com.ehsy.service.RetryService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * @author YanZhen_Li
 * @version 1.0
 * @title A12重试次数
 * @description
 * @create 2024/6/18 18:09
 */
@SpringBootTest
        (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
                properties = {"spring.config.location=classpath:retry-count.yml"})
public class A12重试次数 {
    @Resource
    RetryService service;

    /**
     * 全局请求次数配置测试
     */
    @Test
    public void test1() {
        String test2 = service.test2(1);
        System.out.println(test2);
    }

    /**
     * 局部请求配置测试
     */
    @Test
    public void test2() {
        String test3 = service.test3(500);
        System.out.println(test3);
    }

    /**
     * 重试器配置
     * ! 我们的重试器会自动取出最小的重试时间，所以如果其他地方配置了就不会起作用了
     * 代码位置{@link com.dtflys.forest.retryer.BackOffRetryer:35}
     */
    @Test
    public void test3() {
        String test4 = service.test4(500);
        System.out.println(test4);
    }

    /**
     * 重试条件，我们可以根据A11中的方式使用@Success方式来设置同时条件
     */

    /**
     * 有些特殊情况，需要在请求成功的情况下也要重试，满足一定的业务体条件后才停止重试，这种情况就要RetryWhen来配置了
     *
     * 此处配置的是若发送请求后，服务端返回203状态码，就不断触发重试，直到服务端不返回203，或达到最大重试次数，停止重
     * 试。 若最后一次重试服务端发送的还是203，则认为请求成功，执行onSuccess。
     */
    @Test
    public void test4() {
        String test5 = service.test5(203);
        System.out.println(test5);
    }
}